package com.cskaoyan.javase.basic._1identifier;

/**
 * 标识符identifier的概念:
 * 需要标识符起名字的常见结构有哪些？
 *
 * > 主要有：
 * > 1. 类名（包括后面会学习的接口名、注解名等）
 * > 2. 方法名（main就是一个方法名）
 * > 3. 变量名
 * > 4. 包名
 *
 * Java代码中包(package)的概念: 它类似于操作系统中的文件夹,主要有以下作用:
 *      1.可以用来组织大量的java文件,让代码结构更加清晰
 *      2.可以同来区分同名java文件
 *      3.可以用来区分访问权限(面向对象时再讲)
 *
 * 标识符的命名规范:
 *      1.语法上,强制要求的标识符写法
 *          标识符的组成:
 *              1. 数字（0~9）
 *              2. 字母（A~Z 和 a~z）
 *              3. 美元符号（$）
 *              4. 下划线（_）
 *              5. Unicode 字符集中编号为0xC0以及它后面的所有符号
 *
 *          标识符的开头:
 *              1. 字母（A~Z 和 a~z）
 *              2. 美元符号（$）
 *              3. 下划线（_）
 *              4. Unicode 字符集中编号为0xC0以及它后面的所有符号
 *
 *      2.约定俗成的规范上,虽然不是强制,但是如果不遵守规范,代码会不规范,会导致代码在程序员之间交流困难,会受歧视.建议遵守规范
 *      Java程序员的第一步,从写好标识符的命名规范开始.
 *      约定: 从今晚的作业开始,一旦发现标识符命名不规范,第一次会谈话警告,第二次开始就要跑步了
 *      首先,java标识符应该使用拼写正确的英文单词,禁止使用拼音,更不能使用汉字.当然特殊情况除外,比如baidu,beijing,alibaba.
 *      其次不提倡使用下划线和美元符号,尤其不能作为开头和结尾.
 *      尽量只是用数字和英文字母.
 *      接下来根据不同的结构,标识符的命名规范是不同的:
 *          a.类名(包括接口名,注解名等)使用大驼峰式的命名规范
 *          b.方法名,使用小驼峰式的命名规范
 *          c.变量名,使用小驼峰式的命名规范
 *          d.包名的命名规范,在业界中,普遍喜欢反转公司域名,作为工程包名的开头
 *              比如com.baidu/com.cskaoyan/com.qq
 *              其次,包名应该全部小写,禁止使用大写.如果包名中有多个单词组成的字符串,应该把这个字符串拆开,也就是说,一级包名应该只对应一个单词.如果包名有复数的概念,应该使用单数.
 *
 *
 *      3.代码中的驼峰命名法,指的是多个单词组成的字符串中,用单词首字母区分每个单词,因为使用高低区别,很像驼峰因此得名.
 *      对于My 和 Name组成的字符串
 *      小驼峰命名法:  首个单词,首字母小写,其余单词首字母大写.比如myName,myJava,my
 *      大驼峰命名法:  首个单词,首字母大写,其余单词首字母大写.比如MyName,MyJava,My
 *
 *
 *
 *
 * @since 15:52
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 黄色是警告信息,没有语法错误,能够通过编译
        // 往往是代码规范导致的
        // Non-ASCII characters in an identifier.
        int 你好;
        int $;
        int _;
        int student;
        int age;
        String name;

        // 如果单纯做测试,写demo,用abc等变量名是可以的,但是一旦变量有实际用途时,是严格禁止使用abc的
        int a;
        int b;
        int c;
        // 'long' literal '123l' ends with lowercase 'l'
        long d = 123L;
    }
}
// 一个java文件中,public class 和非public class 是同包的关系
// class Demo{
// 同包下禁止有两个同名的class
// }